Frameless glass object
ver: 0.1
what this script do and doesnt:
- Create simple frameless glass object with a simple rubber sealant around the glass perimeter. the glass would have sub-obj id 1 and sealant 2
- Works with centimeter unit. For conversion edit values marked "-- in cm" with converted value in your file unit.
- Overall depth of glass with sealant is 2.1 cm
how to use it:
- Run script (maxscript > run), customize toolbar, drag anywhere to your toolbar or simply create new one.
The script available under category "- i -".Use mzp for simple drag and drop.
- Create spline around your window, click assigned button, done.
requirement: tested on 3dsmax 2009
todo:
- slice glass object larger than predetermined dimension
credits: attaching selection is part of soulburn script
The script or grab .mzp version (drag n drop to max viewport):
macroScript Object_FramelessGlass
category:"- i -"
toolTip:"Frameless Glass"
buttontext:"FG"
(
o = for i in selection collect i
if (o.count != 1 or superclassof $ != shape) then
MessageBox "Please select one spline at a time" title:"Frameless Glass"
else
(
disableSceneRedraw()
-- checking reversed spline
reversed = false
o = $
convertToSplineShape o
bb1 = (o.max - o.min)
applyOffset o .3 -- in cm
bb2 = (o.max - o.min)
select o
deleteSpline o 2
if (bb1[1] < bb2[1]) then
(
reversed = true
applyOffset o -.3 -- in cm
-- print "reversed"
) else (
applyOffset o .3 -- in cm
-- print "normal"
)
deleteSpline o 1
-- glass
select o
modPanel.addModToSelection (Shell ()) ui:on
o.modifiers[#Shell].innerAmount = 0.4 -- in cm
o.modifiers[#Shell].outerAmount = 0.4 -- in cm
modPanel.addModToSelection (Materialmodifier ())
-- sealant
maxOps.cloneNodes o cloneType:#copy newNodes:&nnl
select nnl
deleteModifier $ 1
deleteModifier $ 1
if reversed == true then ( applyOffset $ .3 ) else (applyOffset $ -.3) -- in cm
deleteSpline nnl 1
select nnl
modPanel.addModToSelection (Shell ()) ui:on
$.modifiers[#Shell].innerAmount = 0.25 -- in cm
$.modifiers[#Shell].outerAmount = 0.25 -- in cm
convertto nnl editable_poly
subobjectLevel = 4
$.EditablePoly.SetSelection #Face #{1..2}
$.insetAmount = 0.5 -- in cm
$.EditablePoly.buttonOp #Inset
$.ConvertSelection #Face #Edge
fedge = polyop.getEdgeSelection $
$.bridgeSelected = 1
$.EditablePoly.Bridge ()
subobjectLevel = 2
$.EditablePoly.SetSelection #Edge fedge
$.edgeChamfer = 0.2 -- in cm
$.edgeChamferSegments = 2
$.EditablePoly.buttonOp #Chamfer
move $.Verts [0,0,0.8] -- in cm
subobjectLevel = 0
modPanel.addModToSelection (symmetry ()) ui:on
$.modifiers[#Symmetry].axis = 2
modPanel.addModToSelection (Materialmodifier ()) ui:on
$.modifiers[#Material].materialID = 2
-- attach all object
convertto o editable_poly
select o
for s in selection do append nnl o
select nnl
for i in 1 to selection.count do
Try(ConvertTo Selection[i] Editable_Poly)Catch()
baseObj = selection[1]
items = #()
for s in selection do append items s
for i in items do
(
if (i != baseObj) then (
if (classof i == Editable_mesh) or (classof i == Editable_Poly) then
baseObj.EditablePoly.attach i baseObj
)
)
-- cleaning up
enableSceneRedraw()
completeRedraw()
gc()
)
)
Hope someone find it useful.
cheers
No comments:
Post a Comment